现代 Rust 利用 函数式编程 原则来提供 零成本抽象。通过将函数视为值、数据视为不可变流,Rust 能够实现富有表现力的 输入/输出操作 而无需牺牲性能。
1. 环境与闭包
与标准函数不同,闭包可以 捕获其环境。它们使用 Fn, FnMut或 FnOnce 特性来管理 闭包中的所有权转移,确保即使函数携带状态时也能保持内存安全。
let v1 = vec![1, 2, 3];
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iter 是惰性的,尚未执行!
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iter 是惰性的,尚未执行!
2. 声明式管道
通过使用 迭代器适配器,开发者可以用简洁的逻辑替代冗长的嵌套循环。 iter_mut 方法 允许进行安全的原地函数式转换,同时编译器会将这些高层调用优化为与手工编写循环相当的汇编代码。
3. 性能基准测试
在 开发配置 或发布配置下编译时, search 函数证明了其高效性。统计基准测试显示: test bench_search_iter ... bench: 19,234,900 纳秒/次迭代。这证实了这些抽象确实是零成本的。
⚠️ 编译器警告
警告:未使用的 `Map` 必须被使用。迭代器是惰性的;除非通过 collect() 或 sum() 等方法消费,否则不会执行任何操作。
collect() 或 sum()。TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>